//广度优先遍历: 先访问离根节点最近的节点
// 比喻：类似读书 先读书名，再读书的目录，再去读书的具体章节

//算法口诀
/**
 * 1.新建一个队列，把根节点入队
 * 2.把对头出队并访问
 * 3.把对头的children挨个入队
 * 4.重复第二、三步，直到队列为空
 */

 const tree = {
    val:'a',
    children:[
      {
         val:'b',
         children:[
             {
                 val:'d',
                 children:[
                     {
                         val:'h',
                         children:[]
                     },
                     {
                         val:'i',
                         children:[]
                     }
                 ]
             },
             {
                 val:'e',
                 children:[]
             }
         ]
      },
      {
         val:'c',
         children:[
             {
                 val:'f',
                 children:[]
             },
             {
                 val:'g',
                 children:[]
             }
         ]
      }
    ]
 }

 const bfs = (tree)=>{
     //新建一个队列
     const queue = [tree]

     while(queue.length>0){
        //对头出队
        const n = queue.shift()
        console.log(n.val);

        //把对头的children进行入队
        n.children.forEach(child=>queue.push(child))
     }
 }

 bfs(tree)